import turtle


# 1)循环语画背景矩形
# 画一个600X400、3:2大小的矩形
_width, _height = 600, 400

# 海龟的基本设置
turtle.title('Python画五角星')
turtle.shape('turtle')
# fastest:0,fast:10,normal:6,slow:3,slowest:1
turtle.speed(speed='fastest')

# 设置窗体大小，在矩形基础上增加50
turtle.setup(width=_width + 50, height=_height + 50)
# 设置画布大小，在矩形基础上增加10
turtle.screensize(canvwidth=_width + 10, canvheight=_height + 10)

# 画布左上角坐标
start_x = -1 * _width / 2
start_y = _height / 2

# 移动海龟到画图起始点位置
turtle.penup()
turtle.goto(start_x, start_y)

# 0 - east
turtle.setheading(0)
turtle.pencolor('red')
turtle.fillcolor('red')
turtle.pendown()
turtle.begin_fill()

# 顺序语句画矩形
# turtle.forward(_width)
# turtle.right(90)
# turtle.forward(_height)
# turtle.right(90)
# turtle.forward(_width)
# turtle.right(90)
# turtle.forward(_height)
# turtle.right(90)

# 循环语句画矩形
for i in range(2):
    turtle.forward(_width)
    turtle.right(90)
    turtle.forward(_height)
    turtle.right(90)

# 完成矩形绘制，红色填充
turtle.end_fill()

# 2)循环画12X8的辅助线
# 每个单元格的大小
unit_len = _width / 12

# 通过for循环画11根白色竖网格线、12等份
turtle.pencolor('white')
# 270 - south
turtle.setheading(270)
for n in range(1, 12):
    turtle.penup()
    turtle.goto(start_x + n * unit_len, start_y)
    turtle.pendown()
    turtle.forward(_height)

# 通过while循环画7根横线、8等份
# 0 - east
turtle.setheading(0)
n = 1
while n < 8:
    turtle.penup()
    turtle.goto(start_x, start_y - n * unit_len)
    turtle.pendown()
    turtle.forward(_width)
    # 循环计数器
    n += 1

# 3)循环画五角星
# 画五角星的外接圆，圆心就是矩形的中心
turtle.penup()
turtle.home()
center_x = turtle.xcor()
center_y = turtle.ycor()

# 3倍单元长度为半径画圆
turtle.penup()
turtle.goto(center_x, center_y + unit_len * 3)
turtle.pendown()
turtle.circle(-unit_len * 3)

# 黄线、黄色填充开始画五角星
turtle.color('yellow', 'yellow')
turtle.begin_fill()
# 偏转半个五角星角的度数 36/2=18 开始画10条边线
turtle.setheading(270)
turtle.left(18)

# 我们把画五角星的任务拆分成画出5个角、10条边线,
# 画五角星就是移动一个角度画一条线，再移动一个角度再画另一条线
# 其中移动72°和144°的画线操作构成一个角
# 这样，通过循环执行5次就可以画出一个完整的五角星
# 使用for循环执行5次，每次2次画线、2次转角，画出1个角、2条线
for i in range(5):
    # 五角星边线长度与外接圆半径比sin(36)/sin(126)=588/809
    # 这里，画的五角星外接圆半径长度占3个单元格大小
    turtle.forward(unit_len * 3 * 588 / 809)
    turtle.left(72)
    turtle.forward(unit_len * 3 * 588 / 809)
    turtle.right(144)

turtle.end_fill()

# 隐藏海龟图标
turtle.hideturtle()
turtle.done()
